// utils/util.js

/**
 * 格式化日期
 * @param {Date} date - 日期对象
 * @param {string} format - 格式字符串，如 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的日期字符串
 */
const formatDate = (date, format) => {
  if (!date) date = new Date()
  const o = {
    'M+': date.getMonth() + 1, // 月份
    'D+': date.getDate(), // 日
    'H+': date.getHours(), // 小时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
    'S': date.getMilliseconds() // 毫秒
  }

  if (/(Y+)/.test(format)) {
    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }

  for (let k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
    }
  }
  return format
}

/**
 * 显示提示框
 * @param {string} title - 提示内容
 * @param {string} icon - 图标，'success', 'loading', 'none'
 * @param {number} duration - 显示时间
 */
const showToast = (title, icon = 'none', duration = 2000) => {
  wx.showToast({
    title,
    icon,
    duration
  })
}

/**
 * 显示加载中提示
 * @param {string} title - 提示内容
 */
const showLoading = (title = '加载中...') => {
  wx.showLoading({
    title
  })
}

/**
 * 隐藏加载中提示
 */
const hideLoading = () => {
  wx.hideLoading()
}

/**
 * 显示确认对话框
 * @param {string} title - 标题
 * @param {string} content - 内容
 * @returns {Promise} Promise对象
 */
const showConfirm = (title, content) => {
  return new Promise((resolve) => {
    wx.showModal({
      title,
      content,
      success: (res) => {
        resolve(res.confirm)
      }
    })
  })
}

/**
 * 存储数据到本地
 * @param {string} key - 键
 * @param {any} value - 值
 */
const setStorage = (key, value) => {
  wx.setStorageSync(key, value)
}

/**
 * 从本地获取数据
 * @param {string} key - 键
 * @returns {any} 存储的值
 */
const getStorage = (key) => {
  return wx.getStorageSync(key)
}

/**
 * 移除本地存储的数据
 * @param {string} key - 键
 */
const removeStorage = (key) => {
  wx.removeStorageSync(key)
}

/**
 * 深度拷贝
 * @param {any} obj - 要拷贝的对象
 * @returns {any} 拷贝后的对象
 */
const deepCopy = (obj) => {
  if (obj === null || typeof obj !== 'object') {
    return obj
  }

  let copy = Array.isArray(obj) ? [] : {}

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key])
    }
  }

  return copy
}

module.exports = {
  formatDate,
  showToast,
  showLoading,
  hideLoading,
  showConfirm,
  setStorage,
  getStorage,
  removeStorage,
  deepCopy
}